Devi creare il programma server TimerServer e relativo il programma client TimerClient.
TimerServer fornisce il servizio di network timer ed è in grado di servire più client contemporaneamente. Il conteggio del timer inizia quando un client si collega; poi ogni volta che il client lo richiede, il server gli ritorna lo stato del timer aggiornato.
TimerServer e TimerClient adottano un semplice protocollo binario per comunicare. Il client richiede al server l’invio dello stato attuale del timer inviando un byte contenente il valore 65; in risposta il server ritorna al client 3 byte che rappresentano il tempo trascorso dall’inizio della connessione nel formato [<minuti>,<secondi>,<centesimi>].
TimerServerProgetta e implementa la classe TimerServer in forma di tool da linea di comando (senza GUI). Il programma deve funzionare secondo le specifiche seguenti:
Client connected accompagnato da indirizzo e numero di porta del clientClient disconnected accompagnato da indirizzo e numero di porta del clientbyte rappresentanti il tempo trascorso dall’inizio della comunicazioneEsempio:
TimerClientLa classe TimerClient possiede una GUI semplicissima (Swing) in cui viene rappresentato lo stato del timer nel modo seguente:
La parte bassa della finestra contiene una etichetta che rappresenta lo stato del conteggio del timer nel formato <mmm>:<ss>:<cc> ed è centrato. La parte centrale della finestra rappresenta un quadrante in cui lo stato del conteggio è rappresentato da:
Il quadrante è disegnato in bianco su sfondo nero è sempre centrato, possiede sempre le dimensioni massime consentite dalle dimensioni della finestra e mantiene un margine minimo di 10 pixel dai bordi dell’area in cui è contenuto.
Quando viene lanciato, il programma si connette al server (sull’indirizzo di loopback) e poi richiede lo stato del timer e aggiorna la grafica ogni 50 millisecondi.
Gli eventuali errori di comunicazione vengono segnalati nel modo seguente: